package org.acb.sgp.controller.impl;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jpl.Query;
import jpl.Term;

import org.acb.sgp.beans.Regla;
import org.acb.sgp.controller.ReglaController;
import org.acb.sgp.service.DataAccessService;
import org.acb.sgp.service.impl.DataAccessServiceImpl;

public class ReglaControllerImpl implements ReglaController {

    private final DataAccessService dataAccessService = new DataAccessServiceImpl();
    static Term tree = null;

    @Override
    public List<Regla> buscarReglas(Regla regla) {
        return dataAccessService.buscarReglas(regla);
    }

    @Override
    public void registrarRegla(Regla regla) {
        dataAccessService.registrarRegla(regla);
    }

    @Override
    public void eliminarRegla(Regla regla) {
        dataAccessService.eliminarRegla(regla);
    }

    public void realizarConsulta(String consulta) throws FileNotFoundException, UnsupportedEncodingException {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
        Date date = new Date();
        String nombre = dateFormat.format(date);

        //Leer reglas de base de datos
        List<Regla> obj_lista = dataAccessService.listarTodasRegla();
        List<String> lista = new ArrayList<String>();

        for (Regla regla : obj_lista) {
            lista.add(regla.getStr_formula());
        }

        //Crear base de conocimientos
        crearFicheroRegla(lista, nombre);

        //Crear consulta
        Query query = new Query(consulta, new Term[]{tree});

    }

    public void crearFicheroRegla(List<String> lista, String nombre) throws FileNotFoundException, UnsupportedEncodingException {
        PrintWriter writer = new PrintWriter("pl/regla_" + nombre + ".pl");
        for (String str : lista) {
            writer.println(str);
        }
        writer.close();
    }

    @Override
    public List<String> evaluarRegla(Regla regla) {
        return dataAccessService.evaluarRegla(regla);
    }

    @Override
    public List<Regla> listarTodasRegla() {
        return dataAccessService.listarTodasRegla();
    }
}
